import { Global, Module } from '@nestjs/common';
import { ClsModule } from 'nestjs-cls';
import { AuditContextManager } from '@nbase/db';
import { RequestContextService } from './services/request-context.service';
import { AuditContextAdapter } from './adapters/audit-context.adapter';

/**
 * 认证公共模块
 *
 * 提供所有认证方式共享的组件：
 * - 请求上下文管理（CLS）
 * - 用户上下文拦截器（保留用于兼容）
 * - 审计上下文适配器（桥接 libs/db）
 * - 密码加密工具
 * - 通用装饰器
 *
 * 注意：CLS 用户上下文现在由 JwtStrategy 直接设置，无需 Middleware 或 Interceptor
 */
@Global()
@Module({
  imports: [
    ClsModule.forRoot({
      global: true,
      middleware: { mount: true },
    }),
  ],
  providers: [
    RequestContextService,
    AuditContextAdapter,
    {
      provide: 'AUDIT_CONTEXT_INIT',
      useFactory: (adapter: AuditContextAdapter) => {
        // 初始化时注册审计上下文到 libs/db
        AuditContextManager.setContext(adapter);
        return true;
      },
      inject: [AuditContextAdapter],
    },
  ],
  exports: [RequestContextService],
})
export class AuthCommonModule {}


